Computers have been widely used for various tasks, for example, stock trading, video streaming, weather forecasting, even performing nuclear reaction simulation. To improve a computer's performance, over the years, the hardware components have been scaled up, for example, by adding more processors, more memory, more cache, etc. More recently, with the development of cloud-based computing, more robust computing systems have been constructed to support the various computing needs with the state of the art hardware components.
Making better use of a robust computing system to support different computing needs, however, presents a unique challenge. For example, stock trading may need many computing sessions for different traders with each trading session providing fast responses (very sensitive to interruptions), but weather forecasting may need very few computing sessions each with long computing time (not sensitive to interruptions). Existing techniques generally involve the computing system allocating system resources based on what resources are available and any needs identified by computing tasks. For example, after a computing system boots up, it determines how much resources, such as computer processors, cores, threads, sockets, memory, etc., are available, and each computing task may be assigned an amount of computing resource based on whether the computing task needs more processors, cores, threads, and memory.